/**
 * Description:
 * Class Name:SingletonTest
 * Date:2022/1/29 9:53
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第6章_面向对象_下._6_3_类成员;

class Singleton{
    // 使用一个类变量来缓存曾经创建的实例
    private static Singleton instance;
    // 对构造器使用private修饰，以防止其他类能自由地创建该类的实例对象，这句不能不写，否则无法防止
    private Singleton(){}
    // 提供一个类方法，添加逻辑，从而保证只产生一个Singleton实例对象
    public static Singleton getInstance(){
        if (instance == null) {
            // 将创建好的实例对象交给类成员变量缓存起来，以防止被回收器回收
            instance = new Singleton();
        }
        return instance;
    }
}

public class SingletonTest {
    public static void main(String[] args) {

        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);			// 可以看到两次产生的Singleton对象实际上是同一个对象
    }
}
